package controle;

import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UIData;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import util.HibernateUtil;
import util.SessionUtil;

import entidades.Aluno;

public class AlunoBean {

	private Aluno aluno = new Aluno();
	private List<Aluno> lista = new ArrayList<Aluno>();
	private UIData objDataTableAluno;
	private String desc="";

	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	public UIData getObjDataTableAluno() {
		return objDataTableAluno;
	}

	public void setObjDataTableAluno(UIData objDataTableAluno) {
		this.objDataTableAluno = objDataTableAluno;
	}

	public String salvar() {
		// Cria a sessao com o banco e a transacao...
		Session session = HibernateUtil.getSession();
		Transaction t = session.beginTransaction();
		try {
			// salva o objeto curso e se der tudo certo comita a transacao
			session.merge(aluno);
			t.commit();
			SessionUtil.addSuccessMessage("OperacaoSucesso");
			// limpa o objeto aluno para novas insercoes...
			aluno = new Aluno();
		} catch (Exception e) {
			// se ocorrer algo errado cancela a transacao
			t.rollback();
			SessionUtil.addErrorMessage("OperacaoFracasso");

		} finally {
			// fecha a sessao com o banco de dados.
			session.close();
		}
		return null;
	}

	public String excluir() {
		// pega o objeto selecionado no DataTable
		aluno = (Aluno) objDataTableAluno.getRowData();
		
		//cria a sessao com o banco e a transacao
		Session session = HibernateUtil.getSession();
		Transaction t = session.beginTransaction();
		try {
			// salva o objeto curso e se der tudo certo comita a transacao
			session.delete(aluno);
			t.commit();
			SessionUtil.addSuccessMessage("OperacaoSucesso");
			// limpa o objeto aluno...
			aluno = new Aluno();
		} catch (Exception e) {
			// se ocorrer algo errado cancela a transacao
			t.rollback();
			SessionUtil.addErrorMessage("OperacaoFracasso");

		} finally {
			// fecha a sessao com o banco de dados.
			session.close();
		}
		return null;

	}
	
	public String alterar(){
		//Pega o objeto selecionado
		aluno = (Aluno) objDataTableAluno.getRowData();
		return "alteraAluno";
	}
	
	public List<Aluno> listaTodosAlunos(){
		//Cria a sessao com o banco..
		Session session = HibernateUtil.getSession();
		//Cria query de consulta
		Query q = session.createQuery("from Aluno");
		//Joga o resultado da consulta dentro de uma list
		List<Aluno> alunos = q.list();
		return alunos;
	}
	
	
	public List<Aluno> listaAlunosPorNome(String nome){
		//Cria a sessao com banco
		Session session=HibernateUtil.getSession();
		//cria a query de consulta
		Query q = session.createQuery("from Aluno a Where a.nome like :nome");
		//seta o parametro de consulta
		q.setParameter("nome", "%"+nome+"%");
		//Joga o resultado da consulta dentro de uma list
		List<Aluno> alunos = q.list();
		return alunos;
	}
	
	
	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}
	
	public String pesquisaAlunos(){
		if(desc.equals("")){
			lista = listaTodosAlunos();
		}else{
			lista = listaAlunosPorNome(desc);
		}
		return null;
	}
	
	
	public List<Aluno> getLista() {
		if(desc.equals("")){
			lista = listaTodosAlunos();
			return lista;
		}else{
			return lista;
		}
	}

	public void setLista(List<Aluno> lista) {
		this.lista = lista;
	}
}
